home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 2 (DVD) / XENIADVD2.iso / Patch / Project Nomads / pnomads_patch2_eng.exe / MAINDIR / Run / scripts / newmenu.tcl < prev    next >
Encoding:
Text File  |  2002-10-22  |  60.5 KB  |  2,034 lines

  1. #-------------------------------------------------------------------------------
  2. # newmenu.tcl
  3. #
  4. # NOMADS main- and ingame-menus.
  5. #
  6. #   06-May-02   floh    menuhandler now created in envinit.tcl!
  7. #   15-May-02   floh    FlushAudio in nm_killgame
  8. #-------------------------------------------------------------------------------
  9.  
  10. global demoFlag
  11. global devstation
  12.  
  13.  
  14. #===============================================================================
  15. #
  16. # Utility functions
  17. #
  18. #===============================================================================
  19.  
  20. #-------------------------------------------------------------------------------
  21. # Play the menu music
  22. #-------------------------------------------------------------------------------
  23. proc nm_menumusic {} {
  24.     /world.playsound book:music/danger3.wav
  25. }
  26.  
  27. #-------------------------------------------------------------------------------
  28. # Register event handlers for menu mouse over events. 
  29. #-------------------------------------------------------------------------------
  30. proc nm_registerevents {} {
  31.  
  32.     on __menuselect {
  33.         # plop
  34.         playfeedbacksound book:feedback/menueover.wav
  35.     }
  36.     
  37.     # FLOH auskommentiert, wegen Ladepausen-Sound-Artefakte
  38.     # (neue Menues haben eine Verzoegerung drin, weil die Bitmaps
  39.     # geladen werden muessen, deshalb gibt es Audio-Artefakte)
  40.     on __menuaction {
  41.         # pling
  42.         # playfeedbacksound book:feedback/use_ok.wav
  43.     }
  44.     
  45.     # FLOH auskommentiert, wegen Ladepausen-Sound-Artefakte
  46.     # (neue Menues haben eine Verzoegerung drin, weil die Bitmaps
  47.     # geladen werden muessen, deshalb gibt es Audio-Artefakte)
  48.     on __menuclose {
  49.         # wusch
  50.         # playfeedbacksound book:feedback/taken_control.wav
  51.     }
  52. }
  53.  
  54. #-------------------------------------------------------------------------------
  55. # Show main menu
  56. #-------------------------------------------------------------------------------
  57. proc nm_mainmenu {} {
  58.     /sys/servers/menuhandler.openmenu "main"
  59.     nm_menumusic
  60.     nm_registerevents
  61. }
  62.  
  63. #-------------------------------------------------------------------------------
  64. # Endgame menu
  65. #-------------------------------------------------------------------------------
  66. proc nm_ingame_endgame {} {
  67.  
  68.     # mute and flush audio
  69.     /sys/servers/audio.flushaudio 0 0
  70.  
  71.     if {[/world.ispaused] == "false"} {
  72.         /world.pausegame
  73.     }
  74.     
  75.     /sys/servers/menuhandler.openmenu "ingame_endgame"
  76.     /sys/servers/menuhandler.reset
  77. }
  78.  
  79. #-------------------------------------------------------------------------------
  80. # Credits
  81. #-------------------------------------------------------------------------------
  82. proc nm_credits {} {
  83.     /sys/servers/menuhandler.showcredits "/data/if_credits/cred" 0
  84. }
  85.  
  86. #-------------------------------------------------------------------------------
  87. # Singleplayer character selection
  88. #-------------------------------------------------------------------------------
  89. proc nm_character_single {} {
  90. global demoFlag
  91.  
  92.     if {$demoFlag} {
  93.  
  94.         # demo distribution: directly start game with char_john
  95.         set character_proto char_john
  96.         m_newgame        
  97.  
  98.     } else {
  99.  
  100.         # Set channels for characters first.
  101.         /sys/servers/channel.setchannel1f will_horiz 0.5
  102.         /sys/servers/channel.setchannel1f will_vert 0.5
  103.         
  104.         # Open character menu
  105.         /sys/servers/menuhandler.openmenu "character_singleplayer"
  106.     }
  107. }
  108. #-------------------------------------------------------------------------------
  109. # Load single player game
  110. #
  111. #   04-Jul-02   floh    fastposses wurde generell aktiviert, das ist falsch, 
  112. #                       weil damit der Zustand von Makegame ueberschrieben wurde
  113. #-------------------------------------------------------------------------------
  114. proc nm_loadgame_single {name} {
  115. global home    
  116.     if {[file exists $home/save/$name.n] == 1} {
  117.         /world.loadgame home:save/$name.n
  118.         
  119.         # Restart point wiederherstellen
  120.         if {[file exists $home/save/restart_$name.n] == 1} {
  121.             file copy -force $home/save/restart_$name.n $home/save/restartpoint.n
  122.         }
  123.  
  124.         # Continue game if paused (ingame menu)
  125.         if {[/world.ispaused]} {
  126.             /world.contgame
  127.         }
  128.  
  129.         # update the save point savegame
  130.         savepoint
  131.     } else {
  132.         puts "Save slot is empty."
  133.         /sys/servers/menuhandler.cancelmenu
  134.     }
  135.     
  136. }
  137.  
  138. #-------------------------------------------------------------------------------
  139. # Load the quick save game.
  140. #-------------------------------------------------------------------------------
  141. proc nm_loadgame_quicksave {} {
  142. global home    
  143.     if {[file exists $home/save/quicksave.n] == 1} {
  144.         /world.loadgame home:save/quicksave.n
  145.         
  146.         # Restart point wiederherstellen
  147.         if {[file exists $home/save/restart_quicksave.n] == 1} {
  148.             file copy -force $home/save/restart_quicksave.n $home/save/restartpoint.n
  149.         }
  150.  
  151.         # Continue game if paused (ingame menu)
  152.         if {[/world.ispaused]} {
  153.             /world.contgame
  154.         }
  155.  
  156.         # update the save point savegame
  157.         savepoint
  158.     }
  159. }
  160.  
  161.  
  162. #-------------------------------------------------------------------------------
  163. # Save current game
  164. #-------------------------------------------------------------------------------
  165. proc nm_savegame_single {name} {
  166. global home    
  167.  
  168.     # Save game and take screenshot
  169.     /world.savegame home:save/$name
  170.     
  171.     # Restart point mit abspeichern
  172.     if {[file exists $home/save/restartpoint.n] == 1} {
  173.         file copy -force $home/save/restartpoint.n $home/save/restart_$name.n
  174.     }
  175.     
  176.     /world.refreshdisplay
  177.     /sys/servers/gfx.scaledscreenshot $home/save/$name.bmp 128 128
  178.  
  179.     # Unpause and restore input mapping
  180.     if {[/world.ispaused]} {
  181.         /world.contgame
  182.     }
  183. }
  184.  
  185. #-------------------------------------------------------------------------------
  186. # Save current game and update the "lastsave.dat" file.
  187. #-------------------------------------------------------------------------------
  188. proc nm_savegame_single_updateslot {name} {
  189. global home
  190.     nm_savegame_single $name
  191.     set slotNum [string range $name 4 end]
  192.     set cid [open "$home/save/lastsave.dat" "w"]
  193.     puts $cid $slotNum
  194.     close $cid
  195. }
  196.  
  197. #-------------------------------------------------------------------------------
  198. # Load island+character files and show character selection screen (Server)
  199. #-------------------------------------------------------------------------------
  200. proc nm_load_character_server {} {
  201. global home
  202.  
  203.     # Hack: Set channels for characters first.
  204.     /sys/servers/channel.setchannel1f will_horiz 0.5
  205.     /sys/servers/channel.setchannel1f will_vert 0.5
  206.  
  207.     # Open character selection menu
  208.     /sys/servers/menuhandler.openmenu "character_server"
  209. }
  210.  
  211. #-------------------------------------------------------------------------------
  212. # Load island+character files and show character selection screen (Client)
  213. #-------------------------------------------------------------------------------
  214. proc nm_load_character_client {} {
  215. global home
  216.  
  217.     # Hack: Set channels for characters first.
  218.     /sys/servers/channel.setchannel1f will_horiz 0.5
  219.     /sys/servers/channel.setchannel1f will_vert 0.5
  220.  
  221.     # Open character selection menu
  222.     /sys/servers/menuhandler.openmenu "character_client"
  223. }
  224.  
  225. #-------------------------------------------------------------------------------
  226. # Select Character+Island slot for multiplayer session (Server)
  227. #-------------------------------------------------------------------------------
  228. proc nm_character_server {slot} {
  229. global character_proto
  230.  
  231.     # Set choosen character
  232.     set character_proto $slot.n
  233.  
  234.     # Open multiplayer load game panel
  235.     /sys/servers/menuhandler.openmenu "loadgame_multiplayer"
  236. }
  237.  
  238. #-------------------------------------------------------------------------------
  239. # Close ingame menu
  240. #-------------------------------------------------------------------------------
  241. proc nm_continue_game {} {
  242.     
  243.     /sys/servers/menuhandler.closemenu
  244.     /sys/servers/menuhandler.reset
  245.     
  246.     # Restore handcontrol if unset (Multiplayer).
  247.     if {[/world.gethandcontrol] == "null"} {
  248.         set carrier [/world.getviewercarrier]
  249.         /world.sethandcontrol $carrier
  250.     }
  251.     
  252.     # Continue game if paused (Singleplayer).
  253.     if {[/world.ispaused] == "true"} {
  254.         /world.contgame
  255.     }
  256. }
  257.  
  258. #-------------------------------------------------------------------------------
  259. # Restart level
  260. #-------------------------------------------------------------------------------
  261. proc nm_restartlevel {} {
  262.     
  263.     /sys/servers/menuhandler.closemenu
  264.     /sys/servers/menuhandler.reset
  265.     
  266.     # Continue game if paused (Singleplayer).
  267.     if {[/world.ispaused] == "true"} {
  268.         /world.contgame
  269.     }
  270.     
  271.     restartlevel
  272. }
  273.  
  274. #-------------------------------------------------------------------------------
  275. # Open single player loadgame screen
  276. #-------------------------------------------------------------------------------
  277. proc nm_open_loadgame_single {} {
  278.     
  279.     # Open load game panel
  280.     /sys/servers/menuhandler.openmenu "loadgame_singleplayer"
  281. }
  282.  
  283. #-------------------------------------------------------------------------------
  284. # Open single player loadgame screen
  285. #-------------------------------------------------------------------------------
  286. proc nm_open_savegame_single {} {
  287.     
  288.     # Open load game panel
  289.     /sys/servers/menuhandler.openmenu "savegame_singleplayer"
  290. }
  291.  
  292. #-------------------------------------------------------------------------------
  293. # Select Character+Island slot for multiplayer session (Client)
  294. #-------------------------------------------------------------------------------
  295. proc nm_character_client {slot} {
  296. global character_proto
  297.  
  298.     # Set choosen character
  299.     set character_proto $slot.n
  300.  
  301.     # Open multiplayer load game panel
  302.     nm_sessionlist_multiplayer
  303. }
  304.  
  305.  
  306. #-------------------------------------------------------------------------------
  307. # Load multiplayer game
  308. #-------------------------------------------------------------------------------
  309. proc nm_loadgame_multi {slot} {
  310. global home
  311.  
  312.     if {[file exists $home/mplevels/$slot.n] == 1} {
  313.  
  314.         # Make filename and load game
  315.         set filename $home/mplevels/$slot
  316.         /world.pausegame
  317.         /world.loadmultiplayergame $filename
  318.  
  319.         # Open multiplayer session
  320.         /world.opensession $slot
  321.  
  322.         # Create character 
  323.         m_createcharacter
  324.  
  325.         # Load client side win/loose handling script
  326.         source $home/scripts/client.tcl
  327.  
  328.         # Setup multiplayer collision table (true => Multiplayer).
  329.         setup_colltable true
  330.  
  331.         # Continue game and fade in
  332.         if {[/world.ispaused]} {
  333.             /world.contgame
  334.         }
  335.         fadein
  336.     
  337.         # Load default event handling.
  338.         source $home/book/defaultevents.tcl
  339.  
  340.         # Choose viewer        
  341.         /world.setviewer2 "/world/viewers/chaseviewer"
  342.     
  343.         # Show `Waiting for other players' menu
  344.         /sys/servers/menuhandler.openmenu "multiplayer_waithost"
  345.         /sys/servers/menuhandler.reset
  346.  
  347.     } else {
  348.         puts "Warning: Slot does not exist."
  349.         /sys/servers/menuhandler.cancelmenu
  350.     }
  351. }
  352.  
  353. #-------------------------------------------------------------------------------
  354. #   Update selected options gui entries from the actual preferences.
  355. #-------------------------------------------------------------------------------
  356. proc nm_updateoptions {name} {
  357.     set value [/world.getpref $name]
  358.     for {set i 0} {$i < $value} {incr i} {
  359.         /world/gui/menus/options/entries/$name/submenu.right
  360.     }
  361. }
  362.  
  363. #-------------------------------------------------------------------------------
  364. # Open `Options' menu and initialize submenu items from env variables
  365. #-------------------------------------------------------------------------------
  366. proc nm_options {} {
  367.  
  368.     # load current prefs settings
  369.     /world.loadprefs
  370.  
  371.     # Open menu
  372.     /sys/servers/menuhandler.openmenu "options"
  373.  
  374.     # Position sub entries; setting variables must exist!!
  375.     
  376.     # update selected option entries
  377.     nm_updateoptions resolution
  378.     nm_updateoptions details
  379.     nm_updateoptions invertmouse
  380.     nm_updateoptions volume
  381.     nm_updateoptions sensitivity
  382. }
  383.  
  384. #-------------------------------------------------------------------------------
  385. # Continue.
  386. #-------------------------------------------------------------------------------
  387. proc nm_contgame {} {
  388.  
  389.     # Load savepoint
  390.     loadsavepoint
  391.  
  392.     # Continue game    
  393.     if {[/world.ispaused]} {
  394.         /world.contgame
  395.     }
  396. }
  397.  
  398. #-------------------------------------------------------------------------------
  399. #  Nearly quit running game
  400. #-------------------------------------------------------------------------------
  401. proc nm_killgame {last} {
  402.     global confirmedMenu
  403.     set confirmedMenu $last
  404.     /sys/servers/menuhandler.openmenu "really_abort"
  405.     
  406. }
  407.  
  408. proc nm_goback {} {
  409.     global confirmedMenu
  410.     /sys/servers/menuhandler.openmenu $confirmedMenu
  411.     
  412. }
  413.  
  414. #-------------------------------------------------------------------------------
  415. #   Thanks for playing screen, this will be displayed when the 
  416. #   the player has successfully finished the last level.
  417. #-------------------------------------------------------------------------------
  418. proc nm_thanxforplaying {} {
  419.     # mute and flush audio
  420.     /sys/servers/audio.flushaudio 0 0
  421.     
  422.     # Kill artefacts
  423.     delete_possessicon
  424.     delete_artefacts
  425.     delete_ebar
  426.     delete_helpscreen
  427.  
  428.     # Quit game; delete all world objects
  429.     /world.killgame
  430.  
  431.     if {[/world.ispaused]} {
  432.         /world.contgame
  433.     }
  434.  
  435.     # Load singleplayer collision table (false => Singleplayer)
  436.     setup_colltable false
  437.  
  438.     # Show thanx for playing menu
  439.    
  440.     /sys/servers/menuhandler.reset
  441.     /sys/servers/menuhandler.hideallbars
  442.     global demoFlag
  443.     if {$demoFlag} {
  444.         /sys/servers/menuhandler.openmenu "thxforplaying"
  445.     } else {
  446.         nm_credits
  447.     }
  448.         
  449. }
  450.  
  451. #-------------------------------------------------------------------------------
  452. #  Really quit running game
  453. #-------------------------------------------------------------------------------
  454. proc nm_reallykillgame {} {
  455.  
  456.     if {[/sys/servers/network.islan]} {
  457.     
  458.         # End LAN Session and go back to main menu.
  459.         
  460.         # mute and flush audio
  461.         /sys/servers/audio.flushaudio 0 0
  462.     
  463.         # Kill artefacts
  464.         delete_possessicon
  465.         delete_artefacts
  466.         delete_ebar
  467.         delete_helpscreen
  468.     
  469.         # Quit game; delete all world objects
  470.         /world.killgame
  471.     
  472.         if {[/world.ispaused]} {
  473.             /world.contgame
  474.         }
  475.     
  476.         # Load singleplayer collision table (false => Singleplayer)
  477.         setup_colltable false
  478.         
  479.         # Reset viewer
  480.         /world.setviewer2 "/world/viewers/chaseviewer"
  481.     
  482.         # Show main menu
  483.         nm_mainmenu
  484.         /sys/servers/menuhandler.reset
  485.         /sys/servers/menuhandler.hideallbars
  486.     } else {
  487.         # End Internet session and quit application.
  488.         # mute and flush audio
  489.         /sys/servers/audio.flushaudio 0 0
  490.     
  491.         # Kill artefacts
  492.         delete_possessicon
  493.         delete_artefacts
  494.         delete_ebar
  495.         delete_helpscreen
  496.     
  497.         # Quit game; delete all world objects
  498.         /world.killgame
  499.     
  500.         if {[/world.ispaused]} {
  501.             /world.contgame
  502.         }
  503.         
  504.         /world.stopgame
  505.     }        
  506. }
  507.  
  508. #-------------------------------------------------------------------------------
  509. # Join multiplayer session
  510. #-------------------------------------------------------------------------------
  511. proc nm_sessionlist_multiplayer {} {
  512.  
  513.     # Get ip address and port
  514.     set ip 0
  515.     set port 0
  516.     set broadcast true
  517.     if {[exists /sys/share/arguments/connect]} {
  518.         set ip [/sys/share/arguments/connect.gets]
  519.         set port 6999
  520.         set broadcast false
  521.     }
  522.     
  523.     # Get list of open session
  524.     /sys/servers/menuhandler.showinfoscreen looking
  525.     set num [/sys/servers/comm.asksessions $broadcast $ip $port]
  526.     /sys/servers/menuhandler.hideinfoscreen
  527.  
  528.     if {$num == 0} {
  529.         puts "No open sessions available."
  530.         /sys/servers/menuhandler.openmenu nosessions
  531.     } else {
  532.         /sys/servers/menuhandler.openmenu sessionlist_multiplayer
  533.     }
  534. }
  535.  
  536. #-------------------------------------------------------------------------------
  537. # Join multiplayer session
  538. #-------------------------------------------------------------------------------
  539. proc nm_joinsession_multiplayer {session} {
  540. global home
  541.  
  542.     # Show loading screen.
  543.     /sys/servers/menuhandler.showinfoscreen loading
  544.     puts "*** Joining session $session. \n"
  545.  
  546.     # Joining session
  547.     if {[/world.joinsession $session] == "false"} {
  548.         puts "Joining session $session failed. "
  549.         # Hide loading screen.
  550.         /sys/servers/menuhandler.hideinfoscreen
  551.  
  552.         # Failed, go back to multiplayer menu
  553.         /world.killgame
  554.         # /sys/servers/menuhandler.cancelmenu
  555.  
  556.         /sys/servers/menuhandler.openmenu nosessions
  557.         return
  558.     }
  559.  
  560.     # Load client side win/loose handling script
  561.     source $home/scripts/client.tcl
  562.     
  563.     # Setup multiplayer collision table (true => Multiplayer).
  564.     setup_colltable true
  565.  
  566.     # Create character
  567.     m_createcharacter
  568.     
  569.     # Load default event handling.
  570.     source $home/book/defaultevents.tcl
  571.     
  572.     # Activate fast possess.
  573.     /world.activatefastpossess
  574.     
  575.     # Hide loading screen.
  576.     /sys/servers/menuhandler.hideinfoscreen
  577.     
  578.     # Choose viewer        
  579.     /world.setviewer2 "/world/viewers/chaseviewer"
  580.     
  581.     # Show `Waiting for other players' menu
  582. #    /world.pausegame
  583.     /sys/servers/menuhandler.openmenu "multiplayer_waitclient"
  584.     /sys/servers/menuhandler.reset
  585. }
  586.  
  587. #-------------------------------------------------------------------------------
  588. # Start session.
  589. #-------------------------------------------------------------------------------
  590. proc nm_startsession {} {
  591.     /world.startsession
  592.     /world.activatefastpossess
  593. }
  594.  
  595. #-------------------------------------------------------------------------------
  596. # Start from command line.
  597. #-------------------------------------------------------------------------------
  598. proc nm_command_line_start {character} {
  599. global home
  600. global character_proto
  601.  
  602.     puts "Starting from command line."
  603.     puts "Selecting character `$character'."
  604.     
  605.     # Arguments
  606.     set host 0
  607.     set ip ""
  608.     set map ""
  609.     
  610.     
  611.     # Look for arguments given to program that started system execution.
  612.     set arguments /sys/share/arguments
  613.     if {[exists $arguments]} {
  614.         
  615.         # Start as server?
  616.         if {[exists /sys/share/arguments/host]} {
  617.             puts "Starting as server."
  618.             set host 1
  619.         }
  620.         
  621.         # Connect to server?
  622.         if {[exists /sys/share/arguments/connect]} {
  623.             set ip [/sys/share/arguments/connect.gets]
  624.             puts "Starting as client (Server ip is `$ip')."
  625.         }
  626.         
  627.         # Select map.
  628.         if {[exists /sys/share/arguments/map]} {
  629.             set map [/sys/share/arguments/map.gets]
  630.             puts "Using multiplayer map `$map'."
  631.         }
  632.     }
  633.  
  634.  
  635.     # Set selected character
  636.     set character_proto $character.n
  637.     puts "Character proto is $character_proto."
  638.     
  639.     # Switch to internet play.
  640.     /sys/servers/network.setlan false
  641.  
  642.     # Load level if server.
  643.     if {$host == 1} {
  644.         if {[file exists $home/mplevels/$map.n] == 1} {
  645.  
  646.  
  647.             # Make filename and load game
  648.             set filename $home/mplevels/$map
  649.             /world.pausegame
  650.             /world.loadmultiplayergame $filename
  651.  
  652.             # Open multiplayer session
  653.             /world.opensession $map
  654.  
  655.             # Create character 
  656.             m_createcharacter
  657.  
  658.             # Load client side win/loose handling script
  659.             source $home/scripts/client.tcl
  660.  
  661.             # Setup multiplayer collision table (true => Multiplayer).
  662.             setup_colltable true
  663.  
  664.             # Continue game and fade in
  665.             if {[/world.ispaused]} {
  666.                 /world.contgame
  667.             }
  668.             fadein
  669.     
  670.             # Load default event handling.
  671.             source $home/book/defaultevents.tcl
  672.  
  673.             # Choose viewer        
  674.             /world.setviewer2 "/world/viewers/chaseviewer"
  675.     
  676.             # Show `Waiting for other players' menu
  677.             /sys/servers/menuhandler.openmenu "multiplayer_waithost"
  678.             /sys/servers/menuhandler.reset
  679.  
  680.         } else {
  681.             puts "Map file `$home/mplevels/$map.n' not found."
  682.             return 0
  683.         }
  684.     } else {
  685.         # Switch to internet play and show available sessions.
  686.         nm_sessionlist_multiplayer
  687.     }
  688.     
  689.     return 1
  690. }
  691.  
  692.  
  693. #-------------------------------------------------------------------------------
  694. # Check for valid map.
  695. #-------------------------------------------------------------------------------
  696. proc nm_valid_map {map} {
  697.  
  698.     if {$map == "slot1" || \
  699.         $map == "slot2" || \
  700.         $map == "slot3" || \
  701.         $map == "slot4" || \
  702.         $map == "slot5" || \
  703.         $map == "slot6" || \
  704.         $map == "slot7" || \
  705.         $map == "slot8" || \
  706.         $map == "slot9" || \
  707.         $map == "slot10" || \
  708.         $map == "slot11" || \
  709.         $map == "slot12" || \
  710.         $map == "slot13" || \
  711.         $map == "slot14" || \
  712.         $map == "slot15"} {
  713.         
  714.         return 1
  715.     }
  716.     
  717.     return 0
  718. }
  719.  
  720. #-------------------------------------------------------------------------------
  721. # Check for valid command line.
  722. #-------------------------------------------------------------------------------
  723. proc nm_valid_command_line {} {
  724. global home
  725.  
  726.     # Arguments
  727.     set host 0
  728.     set ip ""
  729.     set character ""
  730.     set map ""
  731.     
  732.     # Look for arguments given to program that started system execution.
  733.     set arguments /sys/share/arguments
  734.     if {[exists $arguments]} {
  735.         
  736.         # Start as server?
  737.         if {[exists /sys/share/arguments/host]} {
  738.             set host 1
  739.         }
  740.         
  741.         # Connect to server?
  742.         if {[exists /sys/share/arguments/connect]} {
  743.             set ip [/sys/share/arguments/connect.gets]
  744.         }
  745.         
  746.         # Select character.
  747.         if {[exists /sys/share/arguments/character]} {
  748.             set character [/sys/share/arguments/character.gets]
  749.         }
  750.         
  751.         # Select map.
  752.         if {[exists /sys/share/arguments/map]} {
  753.             set map [/sys/share/arguments/map.gets]
  754.         }
  755.     }
  756.     
  757.     # Test if command line valid for Host-/Client-Start.
  758.     if {$host == 1 && $map != ""} {
  759.         puts "Starting as host from command line."
  760.         puts "Using map $map."
  761.         if {[nm_valid_map $map]} {
  762.             return 1
  763.         } else {
  764.             puts "$map is not a valid multiplayer map."
  765.         }
  766.     } elseif {$ip != ""} {
  767.         puts "Starting as client from command line."
  768.         return 1
  769.     } else {
  770.         puts "No command line start."
  771.     }
  772.     
  773.     return 0
  774. }
  775.  
  776. #-------------------------------------------------------------------------------
  777. #
  778. # Main Menu
  779. #
  780. #-------------------------------------------------------------------------------
  781. sel /world/gui
  782.  
  783. new nroot menus
  784. sel menus
  785.  
  786. new nguistandardmenu main
  787. sel main
  788.     .settitle main
  789.     .settitlerect -0.5 0.5 0.96 0.55
  790.     .setabortable false
  791.  
  792.     # Entries
  793.     new nroot entries
  794.     sel entries
  795.  
  796.         if {!$demoFlag} {
  797.             set y0 0.5
  798.             set y1 0.2
  799.         } else {
  800.             set y0 0.3
  801.             set y1 0.0
  802.         }
  803.  
  804.         # Singleplayer
  805.         new nguistandardmenuentry singleplayer
  806.         sel singleplayer
  807.             .setrect -0.4 0.4 $y0 $y1
  808.             .setcommand "/sys/servers/menuhandler.openmenu singleplayer"
  809.         sel ..
  810.  
  811.         set y0 $y1
  812.         set y1 [expr ($y1 - 0.3)]
  813.  
  814.         if {!$demoFlag} {
  815.             # Multiplayer
  816.             new nguistandardmenuentry multiplayer
  817.             sel multiplayer
  818.                 .setrect -0.4 0.4 $y0 $y1
  819.                 .setcommand "/sys/servers/menuhandler.openmenu multiplayer"
  820.             sel ..
  821.  
  822.             set y0 $y1
  823.             set y1 [expr ($y1 - 0.3)]
  824.         }
  825.  
  826.         # Options
  827.         new nguistandardmenuentry options
  828.         sel options
  829.             .setrect -0.4 0.4 $y0 $y1
  830.             .setcommand "nm_options"
  831.         sel ..
  832.  
  833.         set y0 $y1
  834.         set y1 [expr ($y1 - 0.3)]
  835.  
  836.         # Quit game
  837.         new nguistandardmenuentry leavegame
  838.         sel leavegame
  839.             .setrect -0.4 0.4 $y0 $y1
  840.             .setcommand "/sys/servers/menuhandler.openmenu really_exit"
  841.         sel ..
  842.  
  843.         set y0 $y1
  844.         set y1 [expr ($y1 - 0.3)]
  845.  
  846.         # Credits
  847.         if {!$demoFlag} {
  848.             new nguistandardmenuentry credits
  849.             sel credits
  850.                 .setrect -0.4 0.4 $y0 $y1
  851.                 .setcommand "nm_credits"
  852.             sel ..
  853.         }
  854.  
  855.         if {$devstation && (!$demoFlag)} {
  856.             # Run test book
  857.             new nguistandardmenuentry debug
  858.             sel debug
  859.                 .setrect 0.7 1.0 -0.6 -0.9
  860.                 .setcommand "/sys/servers/menuhandler.closemenu; m_testbook"
  861.             sel ..
  862.         }
  863.     sel ..
  864. sel ..
  865.  
  866.  
  867. #-------------------------------------------------------------------------------
  868. # Single player
  869. #-------------------------------------------------------------------------------
  870. new nguistandardmenu singleplayer
  871. sel singleplayer
  872.  
  873.     new nroot entries
  874.     sel entries
  875.  
  876.         new nguistandardmenuentry newgame
  877.         sel newgame
  878.             .setrect -0.4 0.4 0.45 0.15 
  879.             .setcommand "nm_character_single"
  880.         sel ..
  881.  
  882.         new nguistandardmenuentry loadgame
  883.         sel loadgame
  884.             .setrect -0.4 0.4 0.15 -0.15
  885.             .setcommand "nm_open_loadgame_single"
  886.         sel ..
  887.  
  888.         new nguistandardmenuentry cancel
  889.         sel cancel
  890.             .setrect -0.4 0.4 -0.15 -0.45
  891.             .setcommand "/sys/servers/menuhandler.cancelmenu"
  892.         sel ..
  893.     sel ..
  894. sel ..
  895.  
  896.  
  897. #-------------------------------------------------------------------------------
  898. # Multi player
  899. #-------------------------------------------------------------------------------
  900. new nguistandardmenu multiplayer
  901. sel multiplayer
  902.  
  903.     new nroot entries
  904.     sel entries
  905.  
  906.         new nguistandardmenuentry sharesession
  907.         sel sharesession
  908.             .setrect -0.4 0.4 0.45 0.15 
  909.             .setcommand "nm_load_character_server"
  910.         sel ..
  911.  
  912.         new nguistandardmenuentry joinsession
  913.         sel joinsession
  914.             .setrect -0.4 0.4 0.15 -0.15
  915.             .setcommand "nm_load_character_client"
  916.         sel ..
  917.  
  918.         new nguistandardmenuentry cancel
  919.         sel cancel
  920.             .setrect -0.4 0.4 -0.15 -0.45
  921.             .setcommand "/sys/servers/menuhandler.cancelmenu"
  922.         sel ..
  923.     sel ..
  924. sel ..
  925.  
  926.  
  927. #-------------------------------------------------------------------------------
  928. #   Options
  929. #-------------------------------------------------------------------------------
  930. new nguistandardmenu options
  931. sel options
  932.     .settitle options
  933.  
  934.     # Entries
  935.     new nroot entries
  936.     sel entries
  937.  
  938.         set b_left -0.95
  939.         set b_right -0.25
  940.         
  941.         # resolution
  942.         new nguistandardmenuentry resolution
  943.         sel resolution
  944.             .setrect $b_left $b_right 0.6 0.35
  945.  
  946.             # Submenu
  947.             new nguistandardmenu submenu
  948.             sel submenu
  949.                 .setmouseoverselect false
  950.             
  951.                 # Entries
  952.                 new nroot entries
  953.                 sel entries
  954.                 
  955.                     # Low
  956.                     new nguistandardmenuentry 640_480
  957.                     sel 640_480
  958.                         .setrect -0.2 0.2 0.6 0.35
  959.                         .setcommand "/world.setpref resolution 0"
  960.                     sel ..
  961.  
  962.                     # Medium
  963.                     new nguistandardmenuentry 800_600
  964.                     sel 800_600
  965.                         .setrect 0.2 0.6 0.6 0.35
  966.                         .setcommand "/world.setpref resolution 1"
  967.                     sel ..
  968.  
  969.                     # High
  970.                     new nguistandardmenuentry 1024_768
  971.                     sel 1024_768
  972.                         .setrect 0.6 1.0 0.6 0.35
  973.                         .setcommand "/world.setpref resolution 2"
  974.                     sel ..
  975.                 sel ..
  976.             sel ..
  977.         sel ..
  978.  
  979.         # details
  980.         new nguistandardmenuentry details
  981.         sel details
  982.             .setrect $b_left $b_right 0.35 0.1
  983.  
  984.             # Submenu
  985.             new nguistandardmenu submenu
  986.             sel submenu
  987.                 .setmouseoverselect false
  988.  
  989.                 # Entries
  990.                 new nroot entries
  991.                 sel entries
  992.  
  993.                     # Low
  994.                     new nguistandardmenuentry low
  995.                     sel low
  996.                         .setrect -0.2 0.2 0.35 0.1
  997.                         .setcommand "/world.setpref details 0"
  998.                     sel ..
  999.                 
  1000.                     # Medium
  1001.                     new nguistandardmenuentry med
  1002.                     sel med
  1003.                         .setrect  0.2 0.6 0.35 0.1
  1004.                         .setcommand "/world.setpref details 1"
  1005.                     sel ..
  1006.  
  1007.                     # High
  1008.                     new nguistandardmenuentry high
  1009.                     sel high
  1010.                         .setrect 0.6 1.0 0.35 0.1
  1011.                         .setcommand "/world.setpref details 2"
  1012.                     sel ..
  1013.                 sel ..
  1014.             sel ..
  1015.         sel ..
  1016.  
  1017.         # invert mouse
  1018.         new nguistandardmenuentry invertmouse
  1019.         sel invertmouse
  1020.             .setrect $b_left $b_right 0.1 -0.15
  1021.             
  1022.             # Submenu
  1023.             new nguistandardmenu submenu
  1024.             sel submenu
  1025.                 .setmouseoverselect false
  1026.  
  1027.                 # Entries
  1028.                 new nroot entries
  1029.                 sel entries
  1030.                 
  1031.                     # Medium
  1032.                     new nguistandardmenuentry yes
  1033.                     sel yes
  1034.                         .setrect -0.2 0.2 0.1 -0.15
  1035.                         .setcommand "/world.setpref invertmouse 0"
  1036.                     sel ..
  1037.  
  1038.                     # High
  1039.                     new nguistandardmenuentry no
  1040.                     sel no
  1041.                         .setrect 0.2 0.6 0.1 -0.15
  1042.                         .setcommand "/world.setpref invertmouse 1"
  1043.                     sel ..
  1044.                 sel ..
  1045.             sel ..
  1046.         sel ..
  1047.  
  1048.         # volume
  1049.         new nguistandardmenuentry volume
  1050.         sel volume
  1051.             .setrect $b_left $b_right -0.15 -0.4
  1052.  
  1053.             # Submenu
  1054.             new nguistandardmenu submenu
  1055.             sel submenu
  1056.                 .setmouseoverselect false
  1057.  
  1058.                 # Entries
  1059.                 new nroot entries
  1060.                 sel entries
  1061.  
  1062.                     set m_top -0.15
  1063.                     set m_bot -0.35
  1064.                     set m_left -0.15
  1065.                     set m_width 0.14
  1066.                 
  1067.                     new nguistandardmenuentry 1
  1068.                     sel 1
  1069.                         .setrect $m_left [expr $m_left + 1*$m_width] $m_top $m_bot
  1070.                         .setcommand "/world.setpref volume 0"
  1071.                     sel ..
  1072.  
  1073.                     new nguistandardmenuentry 2
  1074.                     sel 2
  1075.                         .setrect [expr $m_left + 1*$m_width] [expr $m_left + 2*$m_width] $m_top $m_bot
  1076.                         .setcommand "/world.setpref volume 1"
  1077.                     sel ..
  1078.  
  1079.                     new nguistandardmenuentry 3
  1080.                     sel 3
  1081.                         .setrect [expr $m_left + 2*$m_width] [expr $m_left + 3*$m_width] $m_top $m_bot
  1082.                         .setcommand "/world.setpref volume 2"
  1083.                     sel ..
  1084.  
  1085.                     new nguistandardmenuentry 4
  1086.                     sel 4
  1087.                         .setrect [expr $m_left + 3*$m_width] [expr $m_left + 4*$m_width] $m_top $m_bot
  1088.                         .setcommand "/world.setpref volume 3"
  1089.                     sel ..
  1090.  
  1091.                     new nguistandardmenuentry 5
  1092.                     sel 5
  1093.                         .setrect [expr $m_left + 4*$m_width] [expr $m_left + 5*$m_width] $m_top $m_bot
  1094.                         .setcommand "/world.setpref volume 4"
  1095.                     sel ..
  1096.  
  1097.                 sel ..  
  1098.             sel ..
  1099.         sel ..
  1100.  
  1101.         # mouse sensitity
  1102.         new nguistandardmenuentry sensitivity
  1103.         sel sensitivity
  1104.             .setrect $b_left $b_right -0.4 -0.65
  1105.             # Submenu
  1106.             new nguistandardmenu submenu
  1107.             sel submenu
  1108.                 .setmouseoverselect false
  1109.  
  1110.                 # Entries
  1111.                 new nroot entries
  1112.                 sel entries
  1113.                 
  1114.                     set m_top -0.4
  1115.                     set m_bot -0.6
  1116.                     set m_left -0.15
  1117.                     set m_width 0.14
  1118.  
  1119.                     new nguistandardmenuentry 1
  1120.                     sel 1
  1121.                         .setrect $m_left [expr $m_left + 1*$m_width] $m_top $m_bot
  1122.                         .setcommand "/world.setpref sensitivity 0"
  1123.                     sel ..
  1124.  
  1125.                     new nguistandardmenuentry 2
  1126.                     sel 2
  1127.                         .setrect [expr $m_left + 1*$m_width] [expr $m_left + 2*$m_width] $m_top $m_bot
  1128.                         .setcommand "/world.setpref sensitivity 1"
  1129.                     sel ..
  1130.  
  1131.                     new nguistandardmenuentry 3
  1132.                     sel 3
  1133.                         .setrect [expr $m_left + 2*$m_width] [expr $m_left + 3*$m_width] $m_top $m_bot
  1134.                         .setcommand "/world.setpref sensitivity 2"
  1135.                     sel ..
  1136.  
  1137.                     new nguistandardmenuentry 4
  1138.                     sel 4
  1139.                         .setrect [expr $m_left + 3*$m_width] [expr $m_left + 4*$m_width] $m_top $m_bot
  1140.                         .setcommand "/world.setpref sensitivity 3"
  1141.                     sel ..
  1142.  
  1143.                     new nguistandardmenuentry 5
  1144.                     sel 5
  1145.                         .setrect [expr $m_left + 4*$m_width] [expr $m_left + 5*$m_width] $m_top $m_bot
  1146.                         .setcommand "/world.setpref sensitivity 4"
  1147.                     sel ..
  1148.  
  1149.                 sel ..  
  1150.             sel ..
  1151.         sel ..
  1152.  
  1153.  
  1154.         # accept
  1155.         new nguistandardmenuentry apply
  1156.         sel apply
  1157.             .setrect -0.8 -0.2 -0.7 -1.0
  1158.             .setcommand "/world.saveprefs; /world.applyprefs; /sys/servers/menuhandler.cancelmenu"
  1159.         sel ..
  1160.  
  1161.         # cancel
  1162.         new nguistandardmenuentry cancel
  1163.         sel cancel
  1164.             .setrect 0.2 0.8 -0.7 -1.0
  1165.             .setcommand "/world.loadprefs; /sys/servers/menuhandler.cancelmenu"
  1166.         sel ..
  1167.  
  1168.     sel ..
  1169.  
  1170. sel ..
  1171.  
  1172.  
  1173. #-------------------------------------------------------------------------------
  1174. # Load game panel for single player mode
  1175. #-------------------------------------------------------------------------------
  1176. new nguiloadsavepanel loadgame_singleplayer
  1177. sel loadgame_singleplayer
  1178.     .setdirectory "home:save/"
  1179.     .setmaxentries 20
  1180.     .setnumentriesx 5
  1181.     .setnumentriesy 4
  1182.     .setcommand "nm_loadgame_single"
  1183.     .settitle loadgame_singleplayer
  1184. sel ..
  1185.  
  1186.  
  1187. #-------------------------------------------------------------------------------
  1188. # Save game panel
  1189. #-------------------------------------------------------------------------------
  1190. new nguiloadsavepanel savegame_singleplayer
  1191. sel savegame_singleplayer
  1192.     .setdirectory "home:save/"
  1193.     .setmaxentries 20
  1194.     .setnumentriesx 5
  1195.     .setnumentriesy 4
  1196.     .setcommand "nm_savegame_single_updateslot"
  1197.     .settitle savegame_singleplayer
  1198. sel ..
  1199.  
  1200. #-------------------------------------------------------------------------------
  1201. #   Procedure generates the character menu cursor and lighting.
  1202. #-------------------------------------------------------------------------------
  1203. proc nm_charactermenu_cursor {} {
  1204.  
  1205.     # Cursor
  1206.     new n3dnode cursor
  1207.     sel cursor
  1208.  
  1209.         new n3dnode gegenlicht
  1210.             sel gegenlicht
  1211.             ry 45
  1212.             rx -45
  1213.             new nlightnode light
  1214.                 sel light
  1215.                 .settype directional
  1216.                 .setcolor 0 0.25 1 1
  1217.             sel ..
  1218.         sel ..
  1219.  
  1220.         # Glowing cursor
  1221.         new n3dnode glow
  1222.         sel glow
  1223.             .txyz 0 -0.9 0
  1224.     
  1225.             # Mesh
  1226.             new nmeshnode mesh
  1227.             sel mesh
  1228.                 .setfilename "lib:glow2/plane.nvx"
  1229.             sel ..
  1230.     
  1231.             # Texture
  1232.             new ntexarraynode tex
  1233.             sel tex
  1234.                 .settexture 0 "lib:glow2/texturenone.ntx" none
  1235.             sel ..
  1236.     
  1237.             # Shader
  1238.             new nlinknode shader
  1239.             sel shader
  1240.                 .settarget "/data/shaders/additive_orange"
  1241.             sel ..
  1242.         sel ..
  1243.     
  1244.         new n3dnode gegenlicht
  1245.             sel gegenlicht
  1246.             ry 45
  1247.             rx -45
  1248.             new nlightnode light
  1249.                 sel light
  1250.                 .settype directional
  1251.                 .setcolor 0 0.25 1 1
  1252.             sel ..
  1253.         sel ..
  1254.     
  1255.         # Light
  1256.         new n3dnode light
  1257.         sel light
  1258.             .txyz 0 1 0.5
  1259.             .setactive true
  1260.     
  1261.              new nlightnode light
  1262.              sel light
  1263.                  .settype point
  1264.                  .setcolor 0.5 0.3 0 1
  1265.                  .setattenuation 0 0 0.5
  1266.              sel ..
  1267.         sel ..
  1268.     sel ..
  1269. }
  1270.  
  1271. #-------------------------------------------------------------------------------
  1272. # Character selection
  1273. #-------------------------------------------------------------------------------
  1274. new nguistandardmenu character_singleplayer
  1275. sel character_singleplayer
  1276.     .settitle character_singleplayer
  1277.  
  1278.     # cursor
  1279.     nm_charactermenu_cursor
  1280.  
  1281.     # entries
  1282.     new nroot entries
  1283.     sel entries
  1284.     
  1285.         # goliath
  1286.         new nguicharacterentry goliath
  1287.         sel goliath
  1288.             .setposition -0.8 0 -2.45
  1289.             .setorientation 0 220 0
  1290.             .setrect -1.0 -0.2 0.6 -1.0
  1291.             .setcommand "/sys/servers/menuhandler.closemenu; set character_proto char_goliath; m_newgame"
  1292.             new nguistandardmenuentry goliath
  1293.             sel goliath
  1294.                 .setrect -0.6 -0.2 0.3 0.15
  1295.             sel ..
  1296.         sel ..
  1297.         
  1298.         # john
  1299.         new nguicharacterentry john
  1300.         sel john
  1301.             .setposition 0.2 0 -2.05
  1302.             .setorientation 0 180 0
  1303.             .setrect -0.2 0.3 0.6 -1.0
  1304.             .setcommand "/sys/servers/menuhandler.closemenu; set character_proto char_john; m_newgame"
  1305.             new nguistandardmenuentry john
  1306.             sel john
  1307.                 .setrect -0.15 0.25 0.25 0.1
  1308.             sel ..
  1309.         sel ..
  1310.         
  1311.         # susie
  1312.         new nguicharacterentry susie
  1313.         sel susie
  1314.             .setposition 1.0 0 -2.2
  1315.             .setorientation 0 140 0
  1316.             .setrect 0.3 1.0 0.6 -1.0
  1317.             .setcommand "/sys/servers/menuhandler.closemenu; set character_proto char_susie; m_newgame"
  1318.             new nguistandardmenuentry susie
  1319.             sel susie
  1320.                 .setrect 0.3 0.7 0.2 0.05
  1321.             sel ..
  1322.         sel ..
  1323.     sel ..
  1324. sel ..
  1325.  
  1326.  
  1327. #-------------------------------------------------------------------------------
  1328. # Ingame singleplayer
  1329. #-------------------------------------------------------------------------------
  1330. new nguistandardmenu ingame_singleplayer
  1331. sel ingame_singleplayer
  1332.     
  1333.     new nroot entries
  1334.     sel entries
  1335.     
  1336.         set m_left -0.36
  1337.         set m_right 0.36
  1338.         set m_top 0.78
  1339.         set m_height 0.27
  1340.         
  1341.         set m_oben $m_top
  1342.         set m_unten [expr $m_oben - $m_height]        
  1343.     
  1344.         new nguistandardmenuentry continue
  1345.         sel continue
  1346.             .setrect $m_left $m_right $m_oben $m_unten
  1347.             .setcommand "nm_continue_game"
  1348.         sel ..
  1349.         
  1350.         set m_oben [expr $m_oben - $m_height]
  1351.         set m_unten [expr $m_unten - $m_height]
  1352.  
  1353.         new nguistandardmenuentry savegame
  1354.         sel savegame
  1355.             .setrect $m_left $m_right $m_oben $m_unten
  1356.             .setcommand "nm_open_savegame_single"
  1357.         sel ..
  1358.         
  1359.         set m_oben [expr $m_oben - $m_height]
  1360.         set m_unten [expr $m_unten - $m_height]
  1361.  
  1362.         new nguistandardmenuentry loadgame
  1363.         sel loadgame
  1364.             .setrect $m_left $m_right $m_oben $m_unten
  1365.             .setcommand "nm_open_loadgame_single"
  1366.         sel ..
  1367.         
  1368.         set m_oben [expr $m_oben - $m_height]
  1369.         set m_unten [expr $m_unten - $m_height]
  1370.  
  1371.         new nguistandardmenuentry restart
  1372.         sel restart
  1373.             .setrect $m_left $m_right $m_oben $m_unten
  1374.             .setcommand "nm_restartlevel"
  1375.         sel ..
  1376.         
  1377.         set m_oben [expr $m_oben - $m_height]
  1378.         set m_unten [expr $m_unten - $m_height]
  1379.         
  1380.         new nguistandardmenuentry options
  1381.         sel options
  1382.             .setrect $m_left $m_right $m_oben $m_unten
  1383.             .setcommand "nm_options"
  1384.         sel ..
  1385.         
  1386.         set m_oben [expr $m_oben - $m_height]
  1387.         set m_unten [expr $m_unten - $m_height]
  1388.  
  1389.         new nguistandardmenuentry killgame
  1390.         sel killgame
  1391.             .setrect $m_left $m_right $m_oben $m_unten
  1392.             .setcommand "nm_killgame ingame_singleplayer"
  1393.         sel ..
  1394.     sel ..
  1395. sel ..
  1396.  
  1397. #-------------------------------------------------------------------------------
  1398. #   Ingame Endgame Menu
  1399. #
  1400. #   Shown when the player dies. 
  1401. #-------------------------------------------------------------------------------
  1402. new nguistandardmenu ingame_endgame
  1403. sel ingame_endgame
  1404.     .settitle you_loose
  1405.     .setabortable false
  1406.     
  1407.     new nroot entries
  1408.     sel entries
  1409.         new nguistandardmenuentry restart
  1410.         sel restart
  1411.             .setrect -0.4 0.4 0.45 0.15
  1412.             .setcommand "nm_restartlevel"
  1413.         sel ..
  1414.         
  1415.         new nguistandardmenuentry loadgame
  1416.         sel loadgame
  1417.             .setrect -0.4 0.4 0.15 -0.15
  1418.             .setcommand "nm_open_loadgame_single"
  1419.         sel ..
  1420.             
  1421.         new nguistandardmenuentry killgame
  1422.         sel killgame
  1423.             .setrect -0.4 0.4 -0.15 -0.45
  1424.             .setcommand "/sys/servers/menuhandler.openmenu ingame_confirm"
  1425.         sel ..
  1426.     sel ..
  1427. sel ..
  1428.  
  1429. #-------------------------------------------------------------------------------
  1430. # Ingame Endgame Confirm
  1431. #-------------------------------------------------------------------------------
  1432. new nguistandardmenu ingame_confirm
  1433. sel ingame_confirm
  1434.     .settitlerect -0.4 0.4 0.3 0.0
  1435.     .settitle ingame_confirm
  1436.     .setabortable false
  1437.  
  1438.     new nroot entries
  1439.     sel entries
  1440.         new nguistandardmenuentry no
  1441.         sel no
  1442.             .setrect -0.8 0.0 0.0 -0.3
  1443.             .setcommand "nm_ingame_endgame"
  1444.         sel ..
  1445.         new nguistandardmenuentry yes
  1446.         sel yes
  1447.             .setrect 0.0 0.8 0.0 -0.3
  1448.             .setcommand "nm_reallykillgame"
  1449.         sel ..
  1450.     sel ..
  1451. sel ..
  1452.  
  1453. #-------------------------------------------------------------------------------
  1454. # Do you really want to exit?
  1455. #-------------------------------------------------------------------------------
  1456. new nguistandardmenu really_exit
  1457. sel really_exit
  1458.     .settitlerect -0.4 0.4 0.3 0.0
  1459.     .settitle really_exit
  1460.     .setabortable true
  1461.     new nroot entries
  1462.     sel entries
  1463.         new nguistandardmenuentry no
  1464.         sel no
  1465.             .setrect -0.8 0.0 0.0 -0.3
  1466.             .setcommand "/sys/servers/menuhandler.openmenu main"
  1467.         sel ..
  1468.         new nguistandardmenuentry yes
  1469.         sel yes
  1470.             .setrect 0.0 0.8 0.0 -0.3
  1471.             .setcommand "/world.stopgame"
  1472.         sel ..
  1473.     sel ..
  1474. sel ..
  1475.  
  1476. #-------------------------------------------------------------------------------
  1477. #   Thanks for playing menu
  1478. #-------------------------------------------------------------------------------
  1479. new nguistandardmenu thxforplaying
  1480. sel thxforplaying
  1481.     .settitle thxforplaying
  1482.     .setbackground locale:if_win.bmp
  1483.     .setcancelselects true
  1484.  
  1485.     new nroot entries
  1486.     sel entries
  1487.         new nguistandardmenuentry continue
  1488.         sel continue
  1489.             .setrect 0.2 1.0 -0.7 -1.0
  1490.             .setcommand "nm_mainmenu"
  1491.         sel ..
  1492.     sel ..
  1493. sel ..
  1494.  
  1495. #-------------------------------------------------------------------------------
  1496. # Do you really want to abort?
  1497. #-------------------------------------------------------------------------------
  1498. new nguistandardmenu really_abort
  1499. sel really_abort
  1500.     .settitlerect -0.4 0.4 0.3 0.0
  1501.     .settitle really_abort
  1502.     .setabortable true
  1503.     new nroot entries
  1504.     sel entries
  1505.         new nguistandardmenuentry no
  1506.         sel no
  1507.             .setrect -0.8 0.0 0.0 -0.3
  1508.             .setcommand "nm_goback"
  1509.         sel ..
  1510.         new nguistandardmenuentry yes
  1511.         sel yes
  1512.             .setrect 0.0 0.8 0.0 -0.3
  1513.             .setcommand "nm_reallykillgame"
  1514.         sel ..
  1515.     sel ..
  1516. sel ..
  1517. #-------------------------------------------------------------------------------
  1518. # Ingame multiplayer
  1519. #-------------------------------------------------------------------------------
  1520. new nguistandardmenu ingame_multiplayer
  1521. sel ingame_multiplayer
  1522.     
  1523.     new nroot entries
  1524.     sel entries
  1525.  
  1526.         # Continue
  1527.         new nguistandardmenuentry continue
  1528.         sel continue
  1529.             .setrect -0.4 0.4 0.45 0.15
  1530.             .setcommand "nm_continue_game"
  1531.         sel ..
  1532.         
  1533.         # Options
  1534.         new nguistandardmenuentry options
  1535.         sel options
  1536.             .setrect -0.4 0.4 0.15 -0.15
  1537.             .setcommand "nm_options"
  1538.         sel ..
  1539.  
  1540.         # Quit game
  1541.         new nguistandardmenuentry killgame
  1542.         sel killgame
  1543.             .setrect -0.4 0.4 -0.15 -0.45
  1544.             .setcommand "nm_killgame ingame_multiplayer"
  1545.         sel ..
  1546.     sel ..
  1547. sel ..
  1548.  
  1549.  
  1550. #-------------------------------------------------------------------------------
  1551. # Multiplayer character selection (Server)
  1552. #-------------------------------------------------------------------------------
  1553. new nguistandardmenu character_server
  1554. sel character_server
  1555.     .settitle character_server
  1556.  
  1557.     # cursor
  1558.     nm_charactermenu_cursor
  1559.  
  1560.     # entries
  1561.     new nroot entries
  1562.     sel entries
  1563.  
  1564.         # goliath
  1565.         new nguicharacterentry goliath
  1566.         sel goliath
  1567.             .setposition -0.8 0 -2.45
  1568.             .setorientation 0 220 0
  1569.             .setrect -1.0 -0.2 0.6 -1.0
  1570.             .setcommand "nm_character_server goliath"
  1571.             new nguistandardmenuentry goliath
  1572.             sel goliath
  1573.                 .setrect -0.6 -0.2 0.3 0.15
  1574.             sel ..
  1575.         sel ..
  1576.         
  1577.         # john
  1578.         new nguicharacterentry john
  1579.         sel john
  1580.             .setposition 0.2 0 -2.05
  1581.             .setorientation 0 180 0
  1582.             .setrect -0.2 0.3 0.6 -1.0
  1583.             .setcommand "nm_character_server john"
  1584.             new nguistandardmenuentry john
  1585.             sel john
  1586.                 .setrect -0.15 0.25 0.25 0.1
  1587.             sel ..
  1588.         sel ..
  1589.         
  1590.         # susie
  1591.         new nguicharacterentry susie
  1592.         sel susie
  1593.             .setposition 1.0 0 -2.2
  1594.             .setorientation 0 140 0
  1595.             .setrect 0.3 1.0 0.6 -1.0
  1596.             .setcommand "nm_character_server susie"
  1597.             new nguistandardmenuentry susie
  1598.             sel susie
  1599.                 .setrect 0.3 0.7 0.2 0.05
  1600.             sel ..
  1601.         sel ..
  1602.     sel ..
  1603. sel ..
  1604.  
  1605.  
  1606. #-------------------------------------------------------------------------------
  1607. # Multiplayer character selection (Client)
  1608. #-------------------------------------------------------------------------------
  1609. new nguistandardmenu character_client
  1610. sel character_client
  1611.     .settitle character_client
  1612.  
  1613.     # cursor
  1614.     nm_charactermenu_cursor
  1615.  
  1616.     # entries
  1617.     new nroot entries
  1618.     sel entries
  1619.     
  1620.         # goliath
  1621.         new nguicharacterentry goliath
  1622.         sel goliath
  1623.             .setposition -0.8 0 -2.45
  1624.             .setorientation 0 220 0
  1625.             .setrect -1.0 -0.2 0.6 -1.0
  1626.             .setcommand "nm_character_client goliath"
  1627.             new nguistandardmenuentry goliath
  1628.             sel goliath
  1629.                 .setrect -0.6 -0.2 0.3 0.15
  1630.             sel ..
  1631.         sel ..
  1632.         
  1633.         # john
  1634.         new nguicharacterentry john
  1635.         sel john
  1636.             .setposition 0.2 0 -2.05
  1637.             .setorientation 0 180 0
  1638.             .setrect -0.2 0.3 0.6 -1.0
  1639.             .setcommand "nm_character_client john"
  1640.             new nguistandardmenuentry john
  1641.             sel john
  1642.                 .setrect -0.15 0.25 0.25 0.1
  1643.             sel ..
  1644.         sel ..
  1645.         
  1646.         # susie
  1647.         new nguicharacterentry susie
  1648.         sel susie
  1649.             .setposition 1.0 0 -2.2
  1650.             .setorientation 0 140 0
  1651.             .setrect 0.3 1.0 0.6 -1.0
  1652.             .setcommand "nm_character_client susie"
  1653.             new nguistandardmenuentry susie
  1654.             sel susie
  1655.                 .setrect 0.3 0.7 0.2 0.05
  1656.             sel ..
  1657.         sel ..
  1658.     sel ..
  1659. sel ..
  1660.  
  1661.  
  1662. #-------------------------------------------------------------------------------
  1663. # Multiplayer character selection (GameSpy)
  1664. #-------------------------------------------------------------------------------
  1665. new nguistandardmenu character_gamespy
  1666. sel character_gamespy
  1667.     .settitle character_client
  1668.     .setabortable false
  1669.  
  1670.     # cursor
  1671.     nm_charactermenu_cursor
  1672.  
  1673.     # entries
  1674.     new nroot entries
  1675.     sel entries
  1676.     
  1677.         # goliath
  1678.         new nguicharacterentry goliath
  1679.         sel goliath
  1680.             .setposition -0.8 0 -2.45
  1681.             .setorientation 0 220 0
  1682.             .setrect -1.0 -0.2 0.6 -1.0
  1683.             .setcommand "nm_command_line_start goliath"
  1684.             new nguistandardmenuentry goliath
  1685.             sel goliath
  1686.                 .setrect -0.6 -0.2 0.3 0.15
  1687.             sel ..
  1688.         sel ..
  1689.         
  1690.         # john
  1691.         new nguicharacterentry john
  1692.         sel john
  1693.             .setposition 0.2 0 -2.05
  1694.             .setorientation 0 180 0
  1695.             .setrect -0.2 0.3 0.6 -1.0
  1696.             .setcommand "nm_command_line_start john"
  1697.             new nguistandardmenuentry john
  1698.             sel john
  1699.                 .setrect -0.15 0.25 0.25 0.1
  1700.             sel ..
  1701.         sel ..
  1702.         
  1703.         # susie
  1704.         new nguicharacterentry susie
  1705.         sel susie
  1706.             .setposition 1.0 0 -2.2
  1707.             .setorientation 0 140 0
  1708.             .setrect 0.3 1.0 0.6 -1.0
  1709.             .setcommand "nm_command_line_start susie"
  1710.             new nguistandardmenuentry susie
  1711.             sel susie
  1712.                 .setrect 0.3 0.7 0.2 0.05
  1713.             sel ..
  1714.         sel ..
  1715.     sel ..
  1716. sel ..
  1717.  
  1718.  
  1719. #-------------------------------------------------------------------------------
  1720. # Load game panel for multi player mode
  1721. #-------------------------------------------------------------------------------
  1722. new nguiloadsavepanel loadgame_multiplayer
  1723. sel loadgame_multiplayer
  1724.     .setdirectory "home:mplevels/"
  1725.     .setmaxentries 15
  1726.     .setnumentriesx 5
  1727.     .setnumentriesy 4
  1728.     .setcommand "nm_loadgame_multi"
  1729.     .settitle loadgame_multiplayer
  1730. sel ..
  1731.  
  1732.  
  1733. #-------------------------------------------------------------------------------
  1734. # Multiplayer session list
  1735. #-------------------------------------------------------------------------------
  1736. new nguisessionspanel sessionlist_multiplayer
  1737. sel sessionlist_multiplayer
  1738.     .setnumentriesx 5
  1739.     .setnumentriesy 4
  1740.     .setcommand "nm_joinsession_multiplayer"
  1741. sel ..
  1742.  
  1743.  
  1744. #-------------------------------------------------------------------------------
  1745. # Multiplayer loose game menu
  1746. #-------------------------------------------------------------------------------
  1747. new nguistandardmenu multiplayer_loose
  1748. sel multiplayer_loose
  1749.     .settitle multiplayer_loose
  1750.     .setabortable false
  1751.  
  1752.     # Entries
  1753.     new nroot entries
  1754.     sel entries
  1755.         
  1756.         # Exit
  1757.         new nguistandardmenuentry killgame
  1758.         sel killgame
  1759.             .setrect -0.4 0.4 0.15 -0.15
  1760.             .setcommand "nm_killgame multiplayer_loose"
  1761.         sel ..
  1762.     sel ..
  1763. sel ..
  1764.  
  1765.  
  1766. #-------------------------------------------------------------------------------
  1767. # Multiplayer win game menu
  1768. #-------------------------------------------------------------------------------
  1769. new nguistandardmenu multiplayer_win
  1770. sel multiplayer_win
  1771.     .settitle multiplayer_win
  1772.     .setabortable false
  1773.  
  1774.     # Entries
  1775.     new nroot entries
  1776.     sel entries
  1777.         
  1778.         # Exit
  1779.         new nguistandardmenuentry killgame
  1780.         sel killgame
  1781.             .setrect -0.4 0.4 0.15 -0.15
  1782.             .setcommand "nm_killgame multiplayer_win"
  1783.         sel ..
  1784.     sel ..
  1785. sel ..
  1786.  
  1787.  
  1788. #-------------------------------------------------------------------------------
  1789. # Multiplayer wait for start game menu
  1790. #-------------------------------------------------------------------------------
  1791. new nguistandardmenu multiplayer_waitclient
  1792. sel multiplayer_waitclient
  1793.     .settitle multiplayer_waitclient
  1794.     .setabortable false
  1795.     
  1796.     # Entries
  1797.     new nroot entries
  1798.     sel entries
  1799.     
  1800.         # Exit
  1801.         new nguistandardmenuentry killgame
  1802.         sel killgame
  1803.             .setrect -0.4 0.4 0.15 -0.15
  1804.             .setcommand "nm_killgame multiplayer_waitclient"
  1805.         sel ..
  1806.     sel ..
  1807. sel ..    
  1808.  
  1809. #-------------------------------------------------------------------------------
  1810. # Multiplayer start game menu
  1811. #-------------------------------------------------------------------------------
  1812. new nguistandardmenu multiplayer_waithost
  1813. sel multiplayer_waithost
  1814.     .settitle multiplayer_waithost
  1815.     .setabortable false
  1816.     
  1817.     # Entries
  1818.     new nroot entries
  1819.     sel entries
  1820.     
  1821.         # Start
  1822.         new nguistandardmenuentry start
  1823.         sel start
  1824.             .setrect -0.4 0.4 0.3 0.0
  1825.             .setcommand "nm_startsession"
  1826.         sel ..
  1827.         
  1828.         # Exit
  1829.         new nguistandardmenuentry killgame
  1830.         sel killgame
  1831.             .setrect -0.4 0.4 0. -0.3
  1832.             .setcommand "nm_killgame multiplayer_waithost"
  1833.         sel ..
  1834.     sel ..
  1835. sel ..    
  1836.  
  1837.  
  1838. #-------------------------------------------------------------------------------
  1839. # Multiplayer connection lost
  1840. #-------------------------------------------------------------------------------
  1841. new nguistandardmenu connection_lost
  1842. sel connection_lost
  1843.     .settitle connection_lost
  1844.     .setabortable false
  1845.     
  1846.     # Entries
  1847.     new nroot entries
  1848.     sel entries
  1849.     
  1850.         # Exit
  1851.         new nguistandardmenuentry killgame
  1852.         sel killgame
  1853.             .setrect -0.4 0.4 0.15 -0.15
  1854.             .setcommand "nm_reallykillgame"
  1855.         sel ..
  1856.     sel ..
  1857. sel ..    
  1858.  
  1859. #-------------------------------------------------------------------------------
  1860. # Multiplayer "no sessions found" menu
  1861. #-------------------------------------------------------------------------------
  1862. new nguistandardmenu nosessions
  1863. sel nosessions
  1864.     .settitle nosessions
  1865.     .setabortable false
  1866.     
  1867.     # Entries
  1868.     new nroot entries
  1869.     sel entries
  1870.     
  1871.         # Try again
  1872.         new nguistandardmenuentry tryagain
  1873.         sel tryagain
  1874.             .setrect -0.4 0.4 0.3 0.0
  1875.             .setcommand "nm_sessionlist_multiplayer"
  1876.         sel ..
  1877.         
  1878.         # Exit
  1879.         new nguistandardmenuentry killgame
  1880.         sel killgame
  1881.             .setrect -0.4 0.4 0.0 -0.3
  1882.             .setcommand "nm_reallykillgame"
  1883.         sel ..
  1884.         
  1885.     sel ..
  1886. sel ..    
  1887.  
  1888.  
  1889. #-------------------------------------------------------------------------------
  1890. # Maennel/Clan/Distance bars
  1891. #-------------------------------------------------------------------------------
  1892. sel /world/gui
  1893. new nroot bars
  1894. sel bars
  1895.  
  1896. #-------------------------------------------------------------------------------
  1897. # Life bar (Default visual is for JOHN, but will be modified in CODE!!!)
  1898. #-------------------------------------------------------------------------------
  1899. new nguibar life
  1900. sel life
  1901.     .setvisual "/data/if_ebar/ebar/leben_char_john/content"
  1902.     .setleftvisual "/data/if_ebar/ebar/leben_char_john/life_bar/left"
  1903.     .setmiddlevisual "/data/if_ebar/ebar/leben_char_john/life_bar/middle"
  1904.     .setrightvisual "/data/if_ebar/ebar/leben_char_john/life_bar/right"
  1905.     
  1906.     .setbasemax 20
  1907.     .setmax 50
  1908.     .setextension 10
  1909.     
  1910.     .setpos -1.7 1.25 -2
  1911.     .setleftpos -1.7 1.25 -2
  1912.     .setmiddlepos -1.1 1.25 -2
  1913.     .setmiddleoffset 0.2 0 0
  1914.     .setrightpos -1.14 1.25 -2
  1915. sel ..
  1916.  
  1917. #-------------------------------------------------------------------------------
  1918. # Life bar for flak
  1919. #-------------------------------------------------------------------------------
  1920. new nguibar flak
  1921. sel flak
  1922.     .setvisual "/data/if_ebar/ebar/flak/content"
  1923.     .setleftvisual "/data/if_ebar/ebar/flak/life_bar/left"
  1924.     .setmiddlevisual "/data/if_ebar/ebar/flak/life_bar/middle"
  1925.     .setrightvisual "/data/if_ebar/ebar/flak/life_bar/right"
  1926.     
  1927.     .setbasemax 20
  1928.     .setmax 20
  1929.     .setextension 10
  1930.     
  1931.     .setpos -1.7 1.25 -2
  1932.     .setleftpos -1.7 1.25 -2
  1933.     .setmiddlepos -1.1 1.25 -2
  1934.     .setmiddleoffset 0.2 0 0
  1935.     .setrightpos -1.14 1.25 -2
  1936. sel ..
  1937.  
  1938.  
  1939. #-------------------------------------------------------------------------------
  1940. # Life bar for vehicle
  1941. #-------------------------------------------------------------------------------
  1942. new nguibar vehicle
  1943. sel vehicle
  1944.     .setvisual "/data/if_ebar/ebar/vhcl/content"
  1945.     .setleftvisual "/data/if_ebar/ebar/vhcl/life_bar/left"
  1946.     .setmiddlevisual "/data/if_ebar/ebar/vhcl/life_bar/middle"
  1947.     .setrightvisual "/data/if_ebar/ebar/vhcl/life_bar/right"
  1948.     
  1949.     .setbasemax 20
  1950.     .setmax 20
  1951.     .setextension 10
  1952.     
  1953.     .setpos -1.7 1.25 -2
  1954.     .setleftpos -1.7 1.25 -2
  1955.     .setmiddlepos -1.1 1.25 -2
  1956.     .setmiddleoffset 0.2 0 0
  1957.     .setrightpos -1.14 1.25 -2
  1958. sel ..
  1959.  
  1960.  
  1961. #-------------------------------------------------------------------------------
  1962. # Clan energy bar
  1963. #-------------------------------------------------------------------------------
  1964. new nguibar clan_energy
  1965. sel clan_energy
  1966.  
  1967.     .setvisual "/data/if_ebar/ebar/kraft/content"
  1968.     .setleftvisual "/data/if_ebar/ebar/kraft/energy_bar/left"
  1969.     .setmiddlevisual "/data/if_ebar/ebar/kraft/energy_bar/middle"
  1970.     .setrightvisual "/data/if_ebar/ebar/kraft/energy_bar/right"
  1971.     
  1972.     .setbasemax 25
  1973.     .setmax 35
  1974.     .setextension 5
  1975.     
  1976.     .setpos -1.77 -1.4 -2.0
  1977.     .setleftpos -1.9 -1.2 -2.0
  1978.     .setmiddlepos -1.9 -0.9 -2.0
  1979.     .setmiddleoffset 0.0 0.1 0.0
  1980.     .setrightpos -1.9 -0.92 -2.0
  1981. sel ..
  1982.  
  1983.  
  1984. #-------------------------------------------------------------------------------
  1985. # Bar for vertical distance to island.
  1986. #-------------------------------------------------------------------------------
  1987. new nguibar vertical_distance
  1988. sel vertical_distance
  1989.     .setvisual "/data/if_ebar/distancebar/verti"
  1990.     .setpos 1.4 -0.92 -2.0
  1991. sel ..
  1992.  
  1993. #-------------------------------------------------------------------------------
  1994. # Bar for horizontal distance to island.
  1995. #-------------------------------------------------------------------------------
  1996. new nguibar horizontal_distance
  1997. sel horizontal_distance
  1998.     .setvisual "/data/if_ebar/distancebar/hori"
  1999.     .setpos 1.4 -0.92 -2.0
  2000. sel ..
  2001.  
  2002. #-------------------------------------------------------------------------------
  2003. # Start with main menu
  2004. #-------------------------------------------------------------------------------
  2005. /sys/servers/menuhandler.reset
  2006. if {[nm_valid_command_line]} {
  2007.     set character ""
  2008.     if {[exists /sys/share/arguments/character]} {
  2009.         set character [/sys/share/arguments/character.gets]
  2010.         if {$character != "goliath" && \
  2011.             $character != "john" && \
  2012.             $character != "susie"} {
  2013.             
  2014.             set character ""
  2015.         }
  2016.     }
  2017.     
  2018.     if {$character != ""} {
  2019.             nm_command_line_start $character
  2020.     } else {
  2021.         # Set channels for characters first.
  2022.         /sys/servers/channel.setchannel1f will_horiz 0.5
  2023.         /sys/servers/channel.setchannel1f will_vert 0.5
  2024.         /sys/servers/menuhandler.openmenu "character_gamespy"
  2025.         /sys/servers/menuhandler.reset
  2026.     }
  2027.     
  2028. } else {
  2029.  
  2030.     # reset time to make menu timing independent from previous loading times
  2031.     /sys/servers/time.resettime
  2032.     /sys/servers/menuhandler.showcredits "/data/if_intro/welcome" 22
  2033. }
  2034.